/*
 * Program dopisz
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dopisz.h"

int main(int argc, char *argv[]) {
	FILE *pd, *pz;
	int i;
	int pliki = 0;

	if(argc < 2) {
		fputs("[!] Nie podales argumentow.\n", stderr);
		fprintf(stderr, "Skladnia: %s plik_docelowy plik_zrodlowy1 ... plik_zlodlowy-n\n", argv[0]);
	}
	else if(argc < 3) {
		fputs("[!] Liczba argumentow nie jest wystarczajaca.\n", stderr);
		fprintf(stderr, "Skladnia: %s plik_docelowy plik_zrodlowy1 ... plik_zlodlowy-n\n", argv[0]);
	}
	else {
		if((pd = fopen(argv[1], "a")) == NULL)
			fprintf(stderr, "Blad utworzenia pliku %s", argv[1]);
		else if(setvbuf(pd, NULL, _IOFBF, ROZMIAR_BUF) != 0)
			fputs("Nie mozna utworzyc bufora wyjsciowego\n", stderr);
		else {
			for(i=2; i<argc; i++) {
				if(strcmp(argv[1], argv[i]) == 0) {
					fprintf(stderr, "Plik %s jest taki sam jak docelowy, pomijam.\n", argv[i]);
					continue;
				}
				else if((pz = fopen(argv[i], "r")) == NULL)
					fprintf(stderr, "Blad otwarcia %s\n", argv[i]);
				else if(setvbuf(pz, NULL, _IOFBF, ROZMIAR_BUF) != 0)
					fputs("Nie mozna utworzyc bufora wejsciowego\n", stderr);
				else {
					dopisz(pz, pd);
					if(ferror(pz) != 0)
						fprintf(stderr, "Blad odczytu pliku %s\n", argv[i]);
					if(ferror(pd) != 0)
						fprintf(stderr, "Blad odczytu pliku %s\n", argv[i]);
					fclose(pz);
					pliki++;
					printf("Plik %s dopisany\n", argv[i]);
				}
			}
			printf("Koniec. Dopisano %d plikow.\n", pliki);
			fclose(pd);
		}
	}
	return 0;
}
